import request from '../../utils/request'
import moment from 'moment'
import pubsub from 'pubsub-js'
// pages/songDetail/songDetail.js
// 获取全局唯一的小程序实例对象
var appInstance = getApp()
// console.log(appInstance.globalData);
Page({

  /**
   * 页面的初始数据
   */
  data: {
    musicId:'',//音乐的id
    isPlay:false,//是否播放音乐的标识
    music:{},//歌曲信息对象
    musicLink:'',//音乐的播放地址
    currentTime:'00:00',//音乐当前的播放时间
    durationTime:'00:00',//音乐的总时间
    currentWidth:0,//进度条的宽度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    const musicId = options.songId
    this.setData({
      musicId
    })
    // console.log(this.data.musicId);

    // 调用接口，获取点进来的歌曲的详情信息数据
    this.getMusicData(this.data.musicId)
    // 创建播放音乐的对象
    this.BackgroundAudioManager =  wx.getBackgroundAudioManager()
    // 判断全局的小程序实例中的globalData中的musicId 和 当前这个页面中的music是否一致,
    // 并且isMusicPlay为true,直接修改当前页中的isPlay的状态为true
    if (appInstance.globalData.musicId === musicId && appInstance.globalData.isMusicPlay) {
      this.setData({
        isPlay:true
      })
    }
    // 监听背景音频播放事件
    this.BackgroundAudioManager.onPlay(() => {
      // console.log('播放了');
      this.changeState(true)
      // this.setData({
      //   isPlay:true
      // })
      // 存储歌曲的播放id(播放的时候存储)
      appInstance.globalData.musicId = musicId
      // appInstance.globalData.isMusicPlay = true
    })

    // 监听背景音频暂停事件
    this.BackgroundAudioManager.onPause(() => {
      // console.log('暂停了');
      this.changeState(false)
      // this.setData({
      //   isPlay:false
      // })
      // 存储歌曲的播放id(播放的时候存储)
      // appInstance.globalData.musicId = musicId
      // appInstance.globalData.isMusicPlay = false
    })

    // 监听背景音频停止事件
    this.BackgroundAudioManager.onStop(() => {
      // console.log('停止了');
      this.changeState(false)
      // this.setData({
      //   isPlay:false
      // })
      // 存储歌曲的播放id(播放的时候存储)
      // appInstance.globalData.musicId = musicId
      // appInstance.globalData.isMusicPlay = false
    })
    // 监听背景音频播放进度更新事件，只有小程序在前台时会回调。
    this.BackgroundAudioManager.onTimeUpdate(() => {
      // console.log(this.BackgroundAudioManager.currentTime);
      // console.log(this.BackgroundAudioManager.duration);
      // 计算当前的播放时间,将它转成分钟:秒的形式
      const currentTime = moment(this.BackgroundAudioManager.currentTime*1000).format('mm:ss')
      this.setData({
        currentTime
      })
      // 计算进度条的宽度
      const currentWidth = this.BackgroundAudioManager.currentTime*450/this.BackgroundAudioManager.duration
      this.setData({
        currentWidth
      })
    })
    // 监听背景音频自然播放结束事件
    this.BackgroundAudioManager.onEnded(() => {
      //重置进度条的宽度和当前的播放时间
      this.setData({
        currentTime:'00:00',
        currentWidth:0
      })
      // 播放下一曲
      this.handlerSwitch({
        currentTarget:{
          id:'next'
        }
      })
    })
  },
  changeState(isPlay,musicId){
    this.setData({
      isPlay
    })
    // 存储歌曲的播放id(播放的时候存储)
    appInstance.globalData.isMusicPlay = isPlay
  },
  // 获取音乐详情
  async getMusicData(musicId){
    const musicData = await request('/song/detail',{ids:musicId})
    //获取音乐的总时间   毫秒的形式 ===> "00:00"
    const durationTime = moment(musicData.songs[0].dt).format('mm:ss')
    // console.log(musicData);
    // console.log(durationTime);
    // 保存起来
    this.setData({
      music:musicData.songs[0],
      durationTime
    })
    // 设置当前页的标题
    wx.setNavigationBarTitle({
      title:this.data.music.name
    })
  },
  // 点击播放和暂停音乐的回调函数
  handlerPlay(){
    const isPlay = !this.data.isPlay
    // 立刻更新这个数据
    this.setData({
      isPlay
    })
    
    const {musicId,musicLink} = this.data
    this.musicControl(isPlay,musicId,musicLink)
  },
  // 控制音乐播放的时候说需要的播放地址的获取
  async musicControl(isPlay,musicId,musicLink){
    if (!isPlay) {
      // 暂停的方法
      this.BackgroundAudioManager.pause()
      return
    }
    // 此时确定是播放的
    // 判断有没有播放地址
    if (!musicLink) {
      // 获取播放地址
      const musicLinkData = await request('/song/url',{id:musicId})
      // 存储播放地址
      musicLink = musicLinkData.data[0].url
      // 立刻保存起来
      this.setData({
        musicLink
      })
      // console.log(musicLinkData);
    }
    // 播放音乐
      
    this.BackgroundAudioManager.src = musicLink //播放地址
    this.BackgroundAudioManager.title = this.data.music.name //标题
  },
  // 点击切换下一曲和上一曲
  handlerSwitch(event){
    // 先有订阅
    pubsub.subscribe('musicId',(msg,musicId)=>{
      // console.log(musicId);
      // 存储音乐的id标识
      this.setData({
        musicId
      })
      // 根据id获取音乐的对象信息
      this.getMusicData(musicId)
      // 根据id获取这个音乐的播放的地址
      this.musicControl(true,musicId)
      // 销毁消息订阅
      pubsub.unsubscribe('musicId')
    })
    const type = event.currentTarget.id
    // console.log(type);
    // 发布消息 ===> 像歌曲推荐的界面发布消息
    pubsub.publish('switch',type)
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})